A COordinate Rotation DIgital Computer (CORDIC) is an electronic circuit or executable code that can be used for the computation of mathematical operations such as trigonometric functions, multiplication and division operations and data type conversion. Such a device may be used, for example, in the processing of data retrieved from storage systems or received by cellular telephone systems and radio transmission systems. In each of the systems data is transferred from a sender to a receiver via some medium. For example, in a storage system, data is sent from a sender (i.e., a write function) to a receiver (i.e., a read function) via a storage medium. As information is stored or transmitted in the form of digital data, mathematical operations that may be performed by a CORDIC are used during the detection or decoding of data. A CORDIC enables these mathematical operations to be performed without a hardware multiplier, and may be implemented using very large scale integration (VLSI) techniques relatively easily.
A CORDIC iteratively computes the rotation of a vector in a Cartesian coordinate system and evaluates the length and angle of the rotated vector. A CORDIC may operate in a rotation mode or a vectoring mode. In the rotation mode, the coordinate components of a vector and an angle of rotation are specified and the coordinate components of the original vector, after rotation through a given angle, are computed. In other words, a vector is specified by X and Y coordinates, the vector is rotated through a specified angle, and the X and Y coordinates of the resulting vector are yielded. In the vectoring mode, the coordinate components of a vector are given and the magnitude and angular argument of the original vector are computed. The vector is rotated until the angular argument is zero so that the total amount of rotation required is the negative of the original argument. In other words, the input vector is rotated to the X axis while recording the angle required to make the rotation in order to compute the magnitude and angular argument of the original vector.
A CORDIC is typically employed in a system with limited hardware resources in which a hardware multiplier is not available. A need therefore exists for a more computationally efficient and compact CORDIC.